import axios from 'axios'
// import { message } from 'ant-design-vue'
// import store from '@/store'

const getBaseUrl = () => {
  // 由于新版谷歌浏览器特性 https://stackoverflow.com/questions/66534759/chrome-cors-error-on-request-to-localhost-dev-server-from-remote-site
  // 前端访问接口使用nginx转发方式
  // 正式: http://10.12.3.162:30622
  // 测试: http://10.12.3.162:32488
  // 转发使用(前端中写的ip)  正式:http://54.223.29.113:8903  测试:http://54.223.29.113:8902
  const env = process.env.NODE_ENV
  const url = (env === 'production' ? 'http://54.223.29.113:8903' : 'http://10.12.3.162:32488')
  return url
}

const tip = function (type, msg) {
  if (type === 'error') {
    message.error(msg)
  } else if (type === 'info') {
    message.info(msg)
  }
}

/*
status:状态,
1.表示前端可以往下进行业务操作，级别：success
0.表示程序错误，抛出异常信息，级别：error
-1.表示无数据，或者部分数据缺失，级别：info
-2.表示无权限，级别：info
-3.表示数据异常，级别：error
500:服务器内部错误
dataset:放置所有业务数据
msg:提示信息
*/
const errorHandle = (status, msg = '') => {
  const errors = [0, -3, 500]
  const infos = [-1, -2]
//   if (errors.includes(status)) {
//     tip('error', msg)
//   } else if (infos.includes(status)) {
//     tip('info', msg)
//   }
}

// axios参数配置
const instance = axios.create({ timeout: 1000 * 16 })
// instance.defaults.baseURL = getBaseUrl()
// 线上测试环境
instance.defaults.baseURL = 'http://10.9.162.248:8000'
// 本地测试
// instance.defaults.baseURL = 'http://10.9.162.214:8000'

instance.defaults.headers.post['Content-Type'] = 'application/json'

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // removePendingRequest(config)
    // addPendingRequest(config)
    const { url } = config
    // if (url.indexOf('/logs') !== -1 || url.indexOf('/runtime') !== -1) { // 轮询接口不加载loading
    //   store.commit('isShowLoading', false)
    // } else {
    //   store.commit('isShowLoading', true)
    // }
    // if (url.indexOf('/login') === -1) {
    //   const token = store.state.loginInfo.token
    //   const headerName = 'token'
    //   if (token) {
    //     config.headers[headerName] = token
    //   }
    // }
    return config
  },
  error => {
    // store.commit('isShowLoading', false)
    Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  res => {
    // removePendingRequest(res.config)
    // store.commit('isShowLoading', false)
    const { data: { status, dataset, msg } } = res
    if (res.status === 200) {
      if (status === 2) {
        // message.info('token失效,3s后自动跳转首页', 3)
        //       .then(() => {
        //         window.location.href = '/'
        //       })
        return
      }
      if (status !== 1) {
        errorHandle(status, msg)
        return Promise.reject(res)
      }
      return Promise.resolve(dataset)
    }
  },
  error => {
    // removePendingRequest(error.config || {})
    // if (axios.isCancel(error)) {
    //   console.log('已取消的重复请求：' + error.message)
    // } else {
    //   console.log('异常')
    // }
    // store.commit('isShowLoading', false)
    const { response } = error
    if (response) {
      errorHandle(response.status, response.data.msg)
      return Promise.reject(response)
    } else {
      !window.navigator.onLine ? tip('error', '网络异常') : tip('error', '服务器异常')
      return Promise.reject(error)
    }
  }
)

// const pendingRequest = new Map()

// 获取请求唯一的key
// function getReqKey(config) {
//   const { method, url, data } = config
//   return `${method}#${url}#${JSON.stringify(data)}`
// }

// map容器中添加cancel对象
// function addPendingRequest(config) {
//   const reqKey = getReqKey(config)
//   config.cancelToken = config.cancelToken || new axios.CancelToken(cancel => {
//     if (!pendingRequest.has(reqKey)) {
//       pendingRequest.set(reqKey, cancel)
//     }
//   })
// }

// 删除map容器中对象,并对请求进行取消
// function removePendingRequest(config) {
//   const reqKey = getReqKey(config)
//   if (pendingRequest.has(reqKey)) {
//     const cancel = pendingRequest.get(reqKey)
//     cancel(reqKey)
//     pendingRequest.delete(reqKey)
//   }
// }

export default instance
